/* *******************************************************************
 * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
 * All rights reserved.
 * This program and the accompanying materials are made available
 * under the terms of the Eclipse Public License v 2.0
 * which accompanies this distribution and is available at
 * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
 *
 * Contributors:
 *     PARC     initial implementation
 * ******************************************************************/

package org.aspectj.weaver;

import org.aspectj.bridge.ISourceLocation;
import org.aspectj.weaver.ast.Var;

public class TestShadow extends Shadow {

	private final World world;
	private final UnresolvedType thisType;

	public TestShadow(Kind kind, Member signature, UnresolvedType thisType, World world) {
		super(kind, signature, null);
		this.world = world;
		this.thisType = thisType;
	}

	public World getIWorld() {
		return world;
	}

	/** this is subtly wrong. ha ha */
	public UnresolvedType getEnclosingType() {
		return thisType;
	}

	public Var getThisVar() {
		// we should thorw if we don't have a this
		return new Var(getThisType().resolve(world));
	}

	public Var getTargetVar() {
		if (!hasTarget())
			throw new RuntimeException("bad");
		return new Var(getTargetType().resolve(world));
	}

	public Var getArgVar(int i) {
		return new Var(getArgType(i).resolve(world));
	}

	public Var getThisEnclosingJoinPointStaticPartVar() {
		throw new RuntimeException("unimplemented");
	}

	public Var getThisAspectInstanceVar(ResolvedType aspectType) {
		throw new RuntimeException("unimplemented");
	}

	public Var getThisJoinPointStaticPartVar() {
		throw new RuntimeException("unimplemented");
	}

	public Var getThisJoinPointVar() {
		throw new RuntimeException("unimplemented");
	}

	public ISourceLocation getSourceLocation() {
		throw new RuntimeException("unimplemented");
	}

	public Member getEnclosingCodeSignature() {
		throw new RuntimeException("unimplemented");
	}

	/*
	 * (non-Javadoc)
	 *
	 * @see org.aspectj.weaver.Shadow#getKindedAnnotationVar()
	 */
	public Var getKindedAnnotationVar(UnresolvedType annotationType) {
		throw new RuntimeException("unimplemented");
	}

	/*
	 * (non-Javadoc)
	 *
	 * @see org.aspectj.weaver.Shadow#getWithinAnnotationVar()
	 */
	public Var getWithinAnnotationVar(UnresolvedType annotationType) {
		throw new RuntimeException("unimplemented");
	}

	/*
	 * (non-Javadoc)
	 *
	 * @see org.aspectj.weaver.Shadow#getWithinCodeAnnotationVar()
	 */
	public Var getWithinCodeAnnotationVar(UnresolvedType annotationType) {
		throw new RuntimeException("unimplemented");
	}

	/*
	 * (non-Javadoc)
	 *
	 * @see org.aspectj.weaver.Shadow#getThisAnnotationVar()
	 */
	public Var getThisAnnotationVar(UnresolvedType annotationType) {
		throw new RuntimeException("unimplemented");
	}

	/*
	 * (non-Javadoc)
	 *
	 * @see org.aspectj.weaver.Shadow#getTargetAnnotationVar()
	 */
	public Var getTargetAnnotationVar(UnresolvedType annotationType) {
		throw new RuntimeException("unimplemented");
	}

	/*
	 * (non-Javadoc)
	 *
	 * @see org.aspectj.weaver.Shadow#getArgAnnotationVar(int)
	 */
	public Var getArgAnnotationVar(int i, UnresolvedType annotationType) {
		throw new RuntimeException("unimplemented");
	}

}
